/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import Modelo.*;
import java.sql.PreparedStatement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONObject;
import org.json.JSONArray;

/**
 *
 * @author Quicksoft
 */
public class PuestoTrabajo_DAO {

    public static boolean insertarPuestoTrabajo(PuestoTrabajo pt) {

        String query = "INSERT INTO puesto_trabajo( nombre_puesto, nombre_cargo, "
                + "descripcion, sede, espacio, id_piso) VALUES ( ?, ?, ?, ?, ?, ?)";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;
        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, pt.getNombrePuesto());
            s.setString(2, pt.getNombreCargo());
            s.setString(3, pt.getDescripcion());
            s.setString(4, pt.getSede());
            s.setString(5, pt.getEspacio());
            s.setInt(6, Integer.parseInt(pt.getPiso()));
            s.executeUpdate();
            return true;
        } catch (SQLException sqle) {
            System.out.println("Error Insertando el Puesto de Trabajo!" + sqle.getMessage());
            System.out.println("SQLState: " + sqle.getSQLState());
            System.out.println("SQLErrorCode: " + sqle.getErrorCode());
            return false;
        }
    }

    public static JSONObject consultarPuestoTrabajo(PuestoTrabajo pt, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject puestos = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Puesto de Trabajo!");
            return null;
        }

        String query = "SELECT * from puesto_trabajo pt ";
        String params = "WHERE (1=1) ";
        if (pt.getNombreCargo() != null && !pt.getNombreCargo().equals("")) {
            params += "and pt.nombre_cargo ='" + pt.getNombreCargo() + "' ";
        }
        if (pt.getNombrePuesto() != null && !pt.getNombrePuesto().equals("")) {
            params += "and lower(pt.nombre_puesto) like '%" + pt.getNombrePuesto().toLowerCase() + "%' ";
        }
        if (pt.getSede() != null && !pt.getSede().equals("")) {
            params += "and pt.sede ='" + pt.getSede() + "' ";
        }
        if (pt.getEspacio() != null && !pt.getEspacio().equals("")) {
            params += "and pt.espacio ='" + pt.getEspacio() + "' ";
        }
        if (pt.getPiso() != null && !pt.getPiso().equals("")) {
            params += "and pt.id_piso ='" + pt.getPiso() + "' ";
        }
        String format = "";
        if (order != null && !order.equals("")) {
            format += " order by " + order;
            if (asc != null && !asc.equals("") && asc.equals("false")) {
                format += " desc";
            } else {
                format += " asc";
            }
        }

        if (limit != null && !limit.equals("")) {
            format += " limit " + limit;
        }
        if (offset != null && !offset.equals("")) {
            format += " offset " + offset;
        }

        try {
            rs = s.executeQuery(query + params+format);
            JSONArray ja = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject puesto = new JSONObject();
                puesto.put("nombre_pt", rs.getString(1));
                puesto.put("nombre_cargo", rs.getString(2));
                puesto.put("descripcion", rs.getString(3));
                puesto.put("sede", rs.getString(4));
                puesto.put("espacio", rs.getString(5));
                puesto.put("piso", rs.getString(6));
                ja.put(i++, puesto);
            }
            puestos.put("puestos", ja);
            System.out.println(ja.toString());

            query = "select count(*) from puesto_trabajo pt " + params;

            rs = s.executeQuery(query);
            if (rs.next()) {
                puestos.put("tam", rs.getString(1));
            }
            return puestos;
        } catch (SQLException se) {
            System.out.println("Error Consultado Puesto de Trabajo DAO!!" + se.getMessage());
            return puestos;
        } catch (Exception e) {
            System.out.println("Error obteniendo data del PT\n" + e.getMessage());
            return puestos;
        }
    }

    public static boolean actualizarPuestoTrabajo(PuestoTrabajo pt) {

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        String query = "UPDATE puesto_trabajo set nombre_cargo = ? ,"
                + " descripcion = ?, sede = ?, espacio = ?,"
                + " id_piso = ? where (nombre_cargo,nombre_puesto,sede) = (?, ?, ?) ";
        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, pt.getNombreCargo());
            s.setString(2, pt.getDescripcion());
            s.setString(3, pt.getSede());
            s.setString(4, pt.getEspacio());
            s.setInt(5, Integer.parseInt(pt.getPiso()));
            s.setString(6, pt.getNombreCargo());
            s.setString(7, pt.getNombrePuesto());
            s.setString(8, pt.getSede());
            s.executeUpdate();
            return true;
        } catch (SQLException se) {
            System.out.println("Error al actualizar el Puesto de Trabajo"+se.getMessage());
            return false;
        }
    }

    public static JSONArray consultarPuestoPersonal(String cedula) {

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;
        ResultSet rs = null;
        JSONArray puestos = new JSONArray();

        String query = "SELECT pusb.nombre_puesto, nombre_1,"
                + " apellido_1, pt.sede, pt.espacio FROM personal_usb pusb,"
                + "comunidad_universitaria cuni, puesto_trabajo pt WHERE "
                + "pusb.ci = ? AND pusb.ci=cuni.ci AND pt.nombre_puesto=pusb.nombre_puesto";
        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, cedula);
        } catch (SQLException ex) {
            Logger.getLogger(PuestoTrabajo_DAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            rs = s.executeQuery();
            int i = 0;

            while (rs.next()) {
                JSONObject puesto = new JSONObject();
                puesto.put("puesto", rs.getString(1));
                puesto.put("nombre_persona", rs.getString(2) + " " + rs.getString(3));
                puesto.put("ubicacion", rs.getString(4) + ", " + rs.getString(5));
                puestos.put(i, puesto);
                i++;
            }
        } catch (Exception e) {
            System.out.println("Error Consultando el Puesto de Trabajo con la cedula " + cedula + "!");
            return null;
        }
        return puestos;
    }

    public static boolean comprobarPuestoTrabajo(PuestoTrabajo pt) throws SQLException {
        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;
        ResultSet rs = null;
        boolean existe = false;

        String query = "SELECT * FROM puesto_trabajo WHERE nombre_puesto = ? AND "
                + "nombre_cargo= ? AND sede= ?";

        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, pt.getNombrePuesto());
            s.setString(2, pt.getNombreCargo());
            s.setString(3, pt.getSede());
            rs = s.executeQuery(query);
            if (rs.next()) {
                existe = true;
            }
        } catch (SQLException se) {
            System.out.println("Error Consultando Puesto de Trabajo!" + se.getMessage());
        }
        // System.out.println(rs.wasNull()+" "+query);
        return existe;
    }

    public static JSONArray listarCargosSede(String sede) {
        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;
        ResultSet rs = null;

        String query = "select distinct nombre_cargo from puesto_trabajo where sede = ?";
        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, sede);
        } catch (SQLException ex) {
            Logger.getLogger(PuestoTrabajo_DAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            rs = s.executeQuery();
            JSONArray puestos = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject puesto = new JSONObject();
                    puesto.put("nombre_cargo", rs.getString(1));
                    puestos.put(i++, puesto);
                }
            } catch (Exception e) {
            }
            return puestos;
        } catch (SQLException se) {
            System.out.println("Error Consultado Puesto de Trabajo DAO!!");
            return null;
        }
    }
}
